package com.cqh.recruit.config;

import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import io.swagger.v3.oas.models.security.SecurityScheme;
import org.springdoc.core.models.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author denghao
 * @date 2025/10/18
 */
@Configuration
public class SwaggerConfig {

    @Bean
    public OpenAPI swaggerOpenApi() {
        return new OpenAPI()
                .info(new Info().title("Talis学习系统接口文档")
                        .description("Talis学习系统接口文档")
                        .version("v1.0"))
                // 配置普通 Token
                .schemaRequirement("TokenAuth", new SecurityScheme()
                        .type(SecurityScheme.Type.APIKEY)   // 使用 APIKEY 方式
                        .in(SecurityScheme.In.HEADER)      // Token 放在请求头
                        .name("token")             // 请求头名称（如 "Authorization"）
                )
                // 全局启用 Token 认证（所有接口默认需要 Token）
                .addSecurityItem(new SecurityRequirement().addList("TokenAuth"));
    }

    /**
     * 学校端API分组
     */
    @Bean
    public GroupedOpenApi schoolApi() {
        return GroupedOpenApi.builder()
                .group("school") // 分组名称
                .pathsToMatch("/api/school/**", "/admin/**", "/api/upload/**") // 学校端接口路径
                .addOpenApiCustomizer(openApi -> {
                    openApi.info(new Info()
                            .title("学校端接口文档")
                            .description("校园招生宣传活动系统 - 学校管理端API")
                            .version("v1.0"));
                })
                .build();
    }

    /**
     * 学生端API分组
     */
    @Bean
    public GroupedOpenApi studentApi() {
        return GroupedOpenApi.builder()
                .group("student") // 分组名称
                .pathsToMatch("/api/student/**", "/user/**") // 学生端接口路径
                .addOpenApiCustomizer(openApi -> {
                    openApi.info(new Info()
                            .title("学生端接口文档")
                            .description("校园招生宣传活动系统 - 学生端API")
                            .version("v1.0"));
                })
                .build();
    }
}